///////////////////////////////////////////////////////////////////////////////
///
/// Cylan Client Core
/// Copyright (C) Shenzhen Cylan Tech. Co., Ltd. 2012
///
/// @file       NativeRes.h
/// @brief      NATIVE RESOURCE  API
///
///////////////////////////////////////////////////////////////////////////////
#ifndef CYLAN_NATIVE_RES_H
#define CYLAN_NATIVE_RES_H

#include "Core/Core.h"
#include "ICAB/ICAB.h"

/**
 * @struct PACKAGE_INFO_ANDROID
 * @brief android 应用资源信息
 */
typedef struct PACKAGE_INFO_ANDROID
{
    char Name[CC_NAME_LEN];         ///< PACKAGE_INFO_ANDROID 包名
    char Version[CC_NAME_LEN];      ///< PACKAGE_INFO_ANDROID 版本字符串
} PACKAGE_INFO_ANDROID;

/**
 * @struct PACKAGE_INFO_IOS
 * @brief android 应用资源信息
 */
typedef struct PACKAGE_INFO_IOS
{
    char Name[CC_NAME_LEN];         ///< PACKAGE_INFO_IOS
    char Version[CC_NAME_LEN];      ///< PACKAGE_INFO_IOS 版本字符串
    char ID[CC_NAME_LEN];           ///< PACKAGE_INFO_IOS 软件唯一标识
    char Urlscheme[CC_NAME_LEN];    ///< PACKAGE_INFO_IOS 
    char Url[CC_MAX_URL];          ///< PACKAGE_INFO_IOS 下载地址
} PACKAGE_INFO_IOS;

/**
 * @struct NATIVE_GROUPSHARE_RESOURCE
 * @brief 本地共享组资源
 */
typedef struct NATIVE_GROUPSHARE_RESOURCE
{
  int ID;
  char Name[CC_NAME_LEN];
} NATIVE_GROUPSHARE_RESOURCE;

/**
 * @struct NATIVE_APPLICATION_RESOURCE
 * @brief 本地应用发布资源
 */
typedef struct NATIVE_APPLICATION_RESOURCE
{
    int ID;                         ///< NATIVE_APPLICATION_RESOURCE资源ID
    char Name[CC_NAME_LEN];         ///< NATIVE_APPLICATION_RESOURCE资源名称
    char Desc[CC_NAME_LEN];         ///< NATIVE_APPLICATION_RESOURCE资源描述
    char Icon[CC_NAME_LEN];         ///< NATIVE_APPLICATION_RESOURCE图标地址
    char Uri[CC_MAX_URL];           ///< NATIVE_APPLICATION_RESOURCE链接地址
    int  IconCreateTime;            ///< 图标创建时间
    int  Weight;                    ///< NATIVE_APPLICATION_RESOURCE资源排序
    int  IosAppType;                ///< Ios app type
    union
    {
        PACKAGE_INFO_ANDROID AndroidPhoneInfo;
        PACKAGE_INFO_ANDROID AndroidPadInfo;
        PACKAGE_INFO_IOS IOSPadInfo;
        PACKAGE_INFO_IOS IOSPhoneInfo;        
    };
    
} NATIVE_APPLICATION_RESOURCE;

/**
 * @fn int NativeGroupshareCount(const CHANDLE Session)
 * @brief 返回会话可用的NATIVE_GROUPSHARE_RESOURCEE资源个数
 * @param Session 已登陆的Session句柄
 * @return 可用的NNATIVE_GROUPSHARE_RESOURCE资源
 */
int NativeGroupshareCount(const CHANDLE Session);

/**
 * @fn CC_STATUS NativeGroupshareInfo(const CHANDLE Session, int Index, NativeGroupshareCount *Resource, int *Size)
 * @brief 获取 NativeGroupshareCount 资源信息
 * @param Session 已登陆的Session句柄
 * @param Index 资源索引
 * @param Resource 调用者提供的缓冲区以保存资源信息
 * @param Size Resource参数的缓冲区大小. 如果提供的缓冲区太小, 会返回所需的缓冲区大小字节数.
 * @return NativeGroupshareCount 资源信息
 * @retval ERR_SUCCESS 成功
 * @retval ERR_NOT_FOUND 资源索引超出可用资源个数范围
 * @retval ERR_BUFFER_TOO_SMALL 提供的Resource缓冲区太小
 */
 CC_STATUS NativeGroupshareInfo(const CHANDLE Session, int Index, NATIVE_GROUPSHARE_RESOURCE *Resource, int *Size);

/**
 * @fn int NativeResourceCount(const CHANDLE Session)
 * @brief 返回会话可用的NATIVE_APPLICATION_RESOURCE资源个数
 * @param Session 已登陆的Session句柄
 * @return 可用的NATIVE_APPLICATION_RESOURCE资源
 */
int NativeResourceCount(const CHANDLE Session);

/**
 * @fn CC_STATUS NativeResourceInfo(const CHANDLE Session, int Index, NATIVE_APPLICATION_RESOURCE *Resource, int *Size)
 * @brief 获取 NATIVE_APPLICATION_RESOURCE 资源信息
 * @param Session 已登陆的Session句柄
 * @param Index 资源索引
 * @param Resource 调用者提供的缓冲区以保存资源信息
 * @param Size Resource参数的缓冲区大小. 如果提供的缓冲区太小, 会返回所需的缓冲区大小字节数.
 * @return NATIVE_APPLICATION_RESOURCE 资源信息
 * @retval ERR_SUCCESS 成功
 * @retval ERR_NOT_FOUND 资源索引超出可用资源个数范围
 * @retval ERR_BUFFER_TOO_SMALL 提供的Resource缓冲区太小
 */
CC_STATUS NativeResourceInfo(const CHANDLE Session, int Index, NATIVE_APPLICATION_RESOURCE *Resource, int *Size);


#endif /* CYLAN_NATIVE_RES_H */
